
public class EmojiFilter {
    /**
	 * 是否包含表情
	 * 
	 * @param codePoint
	 * @return 如果不包含 返回false,包含 则返回true
	 */

	private static boolean isEmojiCharacter(char codePoint) {
		return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
				|| (codePoint == 0xD)
				|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
				|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));
	}

	/**
	 * 过滤emoji 或者 其他非文字类型的字符
	 * 
	 * @author 杨振威 2015-3-26 下午2:42:11
	 * @param source
	 * @return
	 */
	public static String filterEmoji(String source) {

		StringBuilder buf = null;

		int len = source.length();

		for (int i = 0; i < len; i++) {
			char codePoint = source.charAt(i);

			if (!isEmojiCharacter(codePoint)) {// 如果不包含 则将字符append
				if (buf == null) {
					buf = new StringBuilder(source.length());
				}

				buf.append(codePoint);
			} else {
			}
		}

		if (buf == null) {
			return source;// 如果没有找到 emoji表情，则返回源字符串
		} else {
			if (buf.length() == len) {// 这里的意义在于尽可能少的toString，因为会重新生成字符串
				buf = null;
				return source;
			} else {
				return buf.toString();
			}
		}

	}
}
    